Add Advanced Copilot CLI course to the Learning Hub - #2800
Conversation
Publish the "Advanced Copilot CLI" course into the awesome-copilot Learning Hub, mirroring the copilot-workshops / cli-for-beginners precedent. - Add content-sync agentic workflow (.github/workflows/advanced-copilot-cli-sync.md + compiled .lock.yml). Runs read-only against the now-public github-samples/advanced-copilot-cli and opens PRs for human review. staged:true removed (flip-to-live). - Seed the mirrored course tree: course landing + multi-stack track overview + nine module pages (00-08) under website/src/content/docs/learning-hub/advanced-copilot-cli/, plus five images under website/public/images/learning-hub/advanced-copilot-cli/. - Wire navigation: "Advanced Copilot CLI" sidebar group (nested "Multi-stack (AssetTrack)") in website/astro.config.mjs after "Copilot Workshops", and a course entry in learning-hub/index.md. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Publishes the Advanced Copilot CLI course in the Learning Hub and adds weekly upstream synchronization.
Changes:
- Adds nine course modules and five diagrams.
- Adds navigation and course discovery.
- Adds and compiles the synchronization workflow.
Show a summary per file
| File | Description |
|---|---|
.github/aw/actions-lock.json |
Updates agentic workflow action pins. |
.github/workflows/advanced-copilot-cli-sync.md |
Defines weekly course synchronization. |
.github/workflows/advanced-copilot-cli-sync.lock.yml |
Compiles the synchronization workflow. |
website/astro.config.mjs |
Adds course sidebar navigation. |
website/src/content/docs/learning-hub/index.md |
Links the new course. |
website/src/content/docs/learning-hub/advanced-copilot-cli/index.md |
Adds the course landing page. |
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/index.md |
Adds the module index. |
.../multi-stack/00-prerequisites.md |
Adds environment setup. |
.../multi-stack/01-working-with-copilot-cli.md |
Introduces Copilot CLI fundamentals. |
.../multi-stack/02-building-ai-infrastructure.md |
Covers instructions, agents, and skills. |
.../multi-stack/03-test-suite-remote-delegation.md |
Covers testing and delegation. |
.../multi-stack/04-lifecycle-hooks.md |
Covers lifecycle hooks. |
.../multi-stack/05-add-feature-barcode.md |
Adds the feature-development exercise. |
.../multi-stack/06-modernize-apps.md |
Adds modernization exercises. |
.../multi-stack/07-manage-infrastructure.md |
Covers MCP servers and plugins. |
.../multi-stack/08-wrap-up.md |
Concludes the course. |
.../03-test-evidence-loop.png |
Illustrates the testing feedback loop. |
.../03-test-backed-workflow.png |
Illustrates the test-backed workflow. |
.../03-delegation-handoff-flow.png |
Illustrates delegated work. |
.../03-copilot-work-surfaces.png |
Compares Copilot work surfaces. |
.../03-remote-control-flow.png |
Illustrates remote session control. |
Review details
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Suppressed comments (1)
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/02-building-ai-infrastructure.md:13
- Correct the misspelling; the repository's codespell check will flag it.
Every time you start a fresh Copilot CLI session, the agent only sees your raw files in the working directory. Without shared instructions, guidlines and codified conventions, you have to keep re-explaining your stacks and re-establishing your coding standards. That repetition makes sessions much slower and produces inconsistent output, so in this module, we build the **AI infrastructure** that makes future interactions with Copilot faster and more accurate.
- Files reviewed: 15/21 changed files
- Comments generated: 21
- Review effort level: Balanced
| cache-memory: true | ||
| safe-outputs: | ||
| create-pull-request: | ||
| labels: [automated-update, learning-hub, advanced-copilot-cli] |
| - Supporting assets in `content/images/` | ||
| - Any change to module structure, order, or titles | ||
|
|
||
| 4. If a local mirror **already exists** and **no commits** were found since the last sync, do **not** immediately no-op on the strength of the cached SHA alone. The cached `last_synced_sha` is only advanced optimistically when a PR is opened (see Step 5), so a previously opened sync PR that was later **closed or rejected** can leave the cache pointing at a commit whose content never actually reached `main`. Before short-circuiting, **verify the checked-out mirror is genuinely consistent with the current upstream content** (spot-check that every upstream module and image is present in the mirror and not obviously stale). Only if the mirror both is up to date on SHA **and** matches upstream should you call the `noop` safe output with a message like: "No new commits found in `github-samples/advanced-copilot-cli@main` since last sync (`<last_synced_sha>`), and the local mirror matches upstream. No action needed." If the SHA suggests nothing changed but the mirror is actually missing or stale, proceed to Step 2+ and open a PR anyway so a rejected/closed earlier PR cannot permanently hide the update. |
| 6. Fill out the form, using <kbd>Tab</kbd> to move between fields, with the following information: | ||
| - **Server Name**: `playwright` | ||
| - **Server type**: **STDIO** | ||
| - **Command**: `npx @playwright/mcp@latest` |
The [!CAUTION] block describing safe-outputs.staged:true mode is now contradictory since the workflow runs live (staged:true was removed from the config). Drop the block from the markdown body; regenerate the lock file's body_hash to match. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Review details
Suppressed comments (1)
.github/aw/actions-lock.json:26
- This downgrades the shared action lock from gh-aw v0.84.3 to v0.81.6 and removes the existing setup-cli entry, while the repository's other generated workflow locks still require setup v0.84.3. Recompile this workflow with the repository's current gh-aw v0.84.3 so both this registry and
advanced-copilot-cli-sync.lock.ymlare generated consistently.
"github/gh-aw-actions/setup@v0.81.6": {
"repo": "github/gh-aw-actions/setup",
"version": "v0.81.6",
"sha": "ba6380cc6e5be5d21677bebe04d52fb48e3abec7"
- Files reviewed: 15/21 changed files
- Comments generated: 3
- Review effort level: Balanced
| create-pull-request: | ||
| labels: [automated-update, learning-hub, advanced-copilot-cli] | ||
| title-prefix: "[bot] " | ||
| base-branch: main |
There was a problem hiding this comment.
Review details
Suppressed comments (6)
Previously missed (3) — in code that hasn't changed since the last review.
.github/workflows/advanced-copilot-cli-sync.md:28
- The declared source is already ahead of the seeded mirror. Current
mainusesgithub-samples/contoso-inventoryin Modules 0, 3, and 8 andgithub-samples/advanced-copilot-cliin the Module 4 download and Module 6 MCP prompt, while the added pages still reference the old GeekTrainer repositories. Refresh the seed from current upstream before publishing so the initial mirror satisfies the PR's alignment claim.
- **Repository:** [`github-samples/advanced-copilot-cli`](https://github.com/github-samples/advanced-copilot-cli)
- **Branch / ref to read from:** `main` (the repository's default branch)
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/02-building-ai-infrastructure.md:202
.copilot/skills/is not a supported repository-level Agent Skills location, and this statement contradicts the working.github/skills/path used in step 5. Learners following this explanation can create a skill that Copilot CLI does not discover.
Custom agents introduce *specialized personas*. **Agent skills** change what Copilot *knows* to do. A skill is a packaged capability, could include an instruction set, optional scripts and resources - that the agent can invoke **at runtime** when the task matches its trigger. Skills live in `.copilot/skills/` (for repo-scoped) or `~/.copilot/skills/` (for user-scoped) and in Copilot CLI, you use `/skills` to view and manage them.
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/06-modernize-apps.md:82
- This renders as a standalone ordered-list item numbered “2,” because the preceding LSP explanation is a normal paragraph rather than item 1. Remove the
2.prefix (or make both extension points a real two-item list) so the section is not visibly misnumbered. Apply the correction upstream as well to preserve mirror fidelity.
This issue also appears on line 258 of the same file.
2. **An MCP server** extends what Copilot can *do*; a documentation MCP server points that extension at first-party docs. [Model Context Protocol (MCP)][mcp-concept] is an open standard for giving a model access to external tools and data, and Copilot CLI ships with the GitHub MCP server built in. For a Spring Boot major upgrade the documentation that matters is the frameworks' own, and the most direct way to reach it is [GitMCP][gitmcp], an open-source server that turns any public GitHub repository into a documentation surface. Point it at `spring-projects/spring-boot` and Copilot reads Spring's own docs straight from the source, with no account or API key — and because it's open source you can self-host it. Pointing Copilot at a live docs surface is what keeps its framework claims tied to current guidance instead of whatever version happened to be current when its training data was frozen. For a framework major upgrade where the whole point is that things changed, that freshness is the difference between advice you can trust and advice you have to re-verify by hand.
.github/workflows/advanced-copilot-cli-sync.md:18
create-pull-requestcurrently permits patches to any repository path. This sync agent only needs the course mirror, images, navigation, and optional codespell allowlist, so leaving the output unrestricted unnecessarily expands the blast radius of upstream prompt content.
create-pull-request:
labels: [automated-update, learning-hub, advanced-copilot-cli]
title-prefix: "[bot] "
base-branch: main
.github/aw/actions-lock.json:26
- This recompilation downgrades the repository-wide gh-aw action pin from v0.84.3 to v0.81.6 and removes the v0.84.3
setup-clientry, although existing generated workflows andcopilot-setup-steps.ymlstill use those v0.84.3 actions. Recompile this workflow with the repository's current gh-aw version and regenerate both lock artifacts without replacing the shared pins with an older runtime.
"github/gh-aw-actions/setup@v0.81.6": {
"repo": "github/gh-aw-actions/setup",
"version": "v0.81.6",
"sha": "ba6380cc6e5be5d21677bebe04d52fb48e3abec7"
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/06-modernize-apps.md:258
- Calling Jackson 3.1.4 “still-vulnerable” appears backwards: the published 3.1.x Jackson advisories identify 3.1.4 as the fixed release (for example, GHSA-5jmj-h7xm-6q6v affects versions before 3.1.4). Either cite a newer advisory whose affected range includes 3.1.4 or remove the forced BOM override; otherwise learners are instructed to change dependency management based on an unsupported security claim.
Watch the agent work the loop: it bumps the `spring-boot-starter-parent` to Spring Boot `4.1.0` and the `java.version` from `17` to `21`, re-points the `jackson-bom` currency pin at a CVE-clean Jackson 3 (Boot 4.1.0 otherwise resolves a still-vulnerable Jackson `3.1.4`), and builds and tests after each phase. When the LSP is active, notice that it locates callers and symbols precisely rather than grepping.
- Files reviewed: 15/21 changed files
- Comments generated: 1
- Review effort level: Balanced
aaronpowell
left a comment
There was a problem hiding this comment.
Two fixes identified in the comments.
I'm a little unsure on is the terminology "AssetTrack" - is this a product or something that readers should be familiar with when they come to the section of the website?
| "sha": "c863074b673419603d146aab585e2986ef08deec" | ||
| }, | ||
| "github/gh-aw-actions/setup@v0.84.3": { | ||
| "github/gh-aw-actions/setup@v0.81.6": { |
There was a problem hiding this comment.
This is a downgrade of the AW action - can it be reverted.
|
|
||
| When doing standard development, the first step is often to fork or clone the repository you'll be contributing to. For our course, since you'll be working through the exercises on your own, you'll grab a separate copy of the project. You'll do this by creating a new instance of the repository by using a [template repository][github-template-docs] on your own personal GitHub account. | ||
|
|
||
| 1. In your browser, navigate to [https://github.com/geektrainer/legacy-app](https://github.com/geektrainer/legacy-app). |
There was a problem hiding this comment.
This link appears broken
|
Closing as superseded by #2817, which was merged onto the existing awesome-copilot framework. We'll fold the Advanced Copilot CLI course into the IA overhaul on the new design later. Thanks! |
|
Sorry. There was a vestigial breakdown that shouldn't have been there which showed AssetTrack as a title. That's been removed. |
- Re-sync all nine modules from latest github-samples/advanced-copilot-cli (fixes broken template link, typos/grammar, --yolo -> scoped --allow-tool, pinned/curl --fail script download, human review gate, skills path) - Flatten the multi-stack track: modules now live directly under advanced-copilot-cli/, single course landing, simplified sidebar group - Keep gh-aw actions lock at v0.84.3 (revert the v0.81.6 downgrade) and recompile the sync workflow lock accordingly - Model the sync workflow's no-op/cache handling on the beginner sync Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86d57605-5c3a-4249-aee6-8d592a173954
|
@aaronpowell we've addressed both the CCR feedback and your comments. Thanks for the review! |
There was a problem hiding this comment.
Copilot review overview
Review tier: Balanced
Findings: 3
New issues introduced by this change (2)
| Severity | Finding |
|---|---|
.github/workflows/advanced-copilot-cli-sync.md — The workflow does not pin a model, so the generated lock falls back to auto. That fallback has… |
|
website/astro.config.mjs — The PR description promises a nested Multi-stack (AssetTrack) sidebar group and an additional… |
Pre-existing issues (4)
| Severity | Finding |
|---|---|
.github/workflows/advanced-copilot-cli-sync.md — This sync reads untrusted upstream course content and can currently submit changes anywhere in the… View comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/05-add-feature-barcode.md — This launches a mutable latest package while the session is in YOLO mode, so a future package… View comment |
|
.github/workflows/advanced-copilot-cli-sync.md — After a sync PR is opened, the cache advances but main remains stale until that PR merges. On the… View comment |
|
.github/workflows/advanced-copilot-cli-sync.md — The advanced-copilot-cli label does not currently exist in this repository, so the safe-output… View comment |
Issues resolved since last review (21)
| Severity | Finding |
|---|---|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/05-add-feature-barcode.md — A Codespace is disposable, but it is not credential-free: this course relies on its authenticated… View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/06-modernize-apps.md — This sends learners to the old personal course repository even though this PR declares… View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/04-lifecycle-hooks.md — The PR and sync workflow establish github-samples/advanced-copilot-cli as the source of truth,… View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/02-building-ai-infrastructure.md — The repository-scoped path is inconsistent with the exercises below and Module 6, which install… View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/07-manage-infrastructure.md — Use the plural verb to agree with the compound subject “plugin and MCP work.” View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/07-manage-infrastructure.md — Add the missing article before “single repository.” View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/07-manage-infrastructure.md — Remove the stray table delimiter and normalize the numbered-list sentence. View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/07-manage-infrastructure.md — Remove the extra colon after the sentence-ending period. View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/04-lifecycle-hooks.md — Remove the unmatched closing parenthesis. View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/06-modernize-apps.md — The phrase “following the steps lessons” is malformed; add the missing conjunction. View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/06-modernize-apps.md — Remove the duplicated article from the learner prompt. View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/06-modernize-apps.md — The phrase “time to being complex operations” is ungrammatical; use “time to perform complex… View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/02-building-ai-infrastructure.md — Remove the duplicated article from the learner prompt. View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/04-lifecycle-hooks.md — Correct the misspelling; the repository's codespell check will flag it. View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/index.md — Correct the misspelling copied into the module summary; the repository's codespell check will flag… View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/02-building-ai-infrastructure.md — Correct the misspelling; the repository's codespell check will flag it. This issue also appears on… View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/07-manage-infrastructure.md — This asks the agent to merge generated MCP server code as soon as CI finishes, leaving no human… View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/04-lifecycle-hooks.md — This downloads and then executes a shell script from the mutable main branch, allowing any later… View resolved comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/00-prerequisites.md — The default template-repository flow does not copy non-default branches, but Modules 2–7 tell… View resolved comment |
|
.github/workflows/advanced-copilot-cli-sync.md — This warning contradicts the live configuration and PR description: staged is absent and the… View resolved comment |
And 1 more resolved.
Suppressed comments (3)
.github/workflows/advanced-copilot-cli-sync.md:6
- This production workflow omits
strict: true, so compiler warnings and permissive defaults are not elevated during validation. Add strict mode and regenerate the lock file so unsupported or unsafe workflow configuration fails at compile time rather than reaching the scheduled run.
on:
schedule: weekly
workflow_dispatch:
.github/workflows/advanced-copilot-cli-sync.md:18
create-pull-requesthas noallowed-filesrestriction, so a compromised or mistaken sync agent can include unrelated repository files in its PR. Restrict it to this course's docs/image subtrees plus the two navigation files, then regenerate the lock; prompt-level scope is not an enforcement boundary.
create-pull-request:
labels: [automated-update, learning-hub, advanced-copilot-cli]
title-prefix: "[bot] "
base-branch: main
.github/workflows/advanced-copilot-cli-sync.md:105
- The cache is advanced when a sync PR is opened, not when it merges. If that PR is closed or rejected, the next run finds no commits after the cached SHA and this instruction immediately no-ops, permanently hiding the unmerged update. Treat the SHA only as a hint: verify the checked-out mirror still matches upstream before no-oping, as the sibling
copilot-workshops-sync.md:123does.
4. If **no commits** were found since the last sync, stop here and call the `noop` safe output with a message like: "No new commits found in `github-samples/advanced-copilot-cli@main` since last sync (`<last_synced_sha>`). No action needed." Then update the cache with the latest SHA.
| name: "Advanced Copilot CLI Content Sync" | ||
| description: "Weekly check for updates to the Advanced Copilot CLI source repo (github-samples/advanced-copilot-cli). Opens a PR to keep the Learning Hub mirror aligned when substantive upstream course changes are detected." |
| label: "Advanced Copilot CLI", | ||
| items: [ | ||
| { | ||
| label: "Overview", | ||
| link: "/learning-hub/advanced-copilot-cli/", |
Match the copilot-workshops sync pattern so a rejected/closed sync PR cannot permanently hide an unmerged upstream update: verify the mirror matches upstream before no-op, and keep the cache "optimization hint" note. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86d57605-5c3a-4249-aee6-8d592a173954
There was a problem hiding this comment.
Copilot review overview
Review tier: Balanced
Findings: 3
New issues introduced by this change (1)
| Severity | Finding |
|---|---|
.github/workflows/advanced-copilot-cli-sync.md — On a missing/expired cache, limiting discovery to seven days loses the seeded baseline. If the… |
Pre-existing issues (6)
| Severity | Finding |
|---|---|
.github/workflows/advanced-copilot-cli-sync.md — The workflow does not pin a model, so the generated lock falls back to auto. That fallback has… View comment |
|
.github/workflows/advanced-copilot-cli-sync.md — This sync reads untrusted upstream course content and can currently submit changes anywhere in the… View comment |
|
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/05-add-feature-barcode.md — This launches a mutable latest package while the session is in YOLO mode, so a future package… View comment |
|
.github/workflows/advanced-copilot-cli-sync.md — After a sync PR is opened, the cache advances but main remains stale until that PR merges. On the… View comment |
|
.github/workflows/advanced-copilot-cli-sync.md — The advanced-copilot-cli label does not currently exist in this repository, so the safe-output… View comment |
|
website/astro.config.mjs — The PR description promises a nested Multi-stack (AssetTrack) sidebar group and an additional… View comment |
Suppressed comments (4)
Previously missed (2) — in code that hasn't changed since the last review.
.github/workflows/advanced-copilot-cli-sync.md:14
- The workflow supports syncing images but retains the 4 MiB default PR patch limit. The current five upstream course images total about 5.9 MiB, so a refresh that replaces all of them cannot produce a PR even though it is well below the documented 100-file threshold. Raise the limit (or add byte-based batching) and recompile.
safe-outputs:
website/src/content/docs/learning-hub/advanced-copilot-cli/06-modernize-apps.md:82
- This renders as an orphaned ordered-list item numbered “2”, but there is no item 1 in this section. Remove the numbering so the LSP and MCP paragraphs remain parallel prose.
2. **An MCP server** extends what Copilot can *do*; a documentation MCP server points that extension at first-party docs. [Model Context Protocol (MCP)][mcp-concept] is an open standard for giving a model access to external tools and data, and Copilot CLI ships with the GitHub MCP server built in. For a Spring Boot major upgrade the documentation that matters is the frameworks' own, and the most direct way to reach it is [GitMCP][gitmcp], an open-source server that turns any public GitHub repository into a documentation surface. Point it at `spring-projects/spring-boot` and Copilot reads Spring's own docs straight from the source, with no account or API key — and because it's open source you can self-host it. Pointing Copilot at a live docs surface is what keeps its framework claims tied to current guidance instead of whatever version happened to be current when its training data was frozen. For a framework major upgrade where the whole point is that things changed, that freshness is the difference between advice you can trust and advice you have to re-verify by hand.
.github/workflows/advanced-copilot-cli-sync.md:10
- The workflow leaves the model unset, so the compiled lock falls back to
auto(advanced-copilot-cli-sync.lock.yml:115,839). This repository has already seenautorejected because it has no AI-credit pricing; pin a priced model and recompile the lock file so scheduled syncs do not fail before doing any work.
tools:
.github/workflows/advanced-copilot-cli-sync.md:18
- The PR safe output is not restricted to the mirror paths. Because the agent consumes upstream repository content, omitting
allowed-fileslets a misleading or compromised source file produce changes anywhere outside the default protected-file list. Constrain the patch to the course pages/assets and the two navigation files.
create-pull-request:
labels: [automated-update, learning-hub, advanced-copilot-cli]
title-prefix: "[bot] "
base-branch: main
|
|
||
| 2. Use GitHub tools to fetch recent commits from `github-samples/advanced-copilot-cli` on the `main` branch: | ||
| - If `last_synced_sha` exists, list commits **since that SHA** (stop once you reach it). | ||
| - If no cached state exists, list commits from the **past 7 days**. |
|
@GeekTrainer should we close this one because the other PR was merged? |



Note
For human review — please do not auto-merge. This PR publishes a new Learning Hub course and its content-sync workflow into
github/awesome-copilot.Summary
Publishes the Advanced Copilot CLI course into the awesome-copilot Learning Hub, mirroring the established
cli-for-beginners/copilot-workshopsprecedent. Three parts: a content-sync agentic workflow, the seeded course mirror, and navigation wiring.1. Content-sync workflow
.github/workflows/advanced-copilot-cli-sync.md(+ compiledadvanced-copilot-cli-sync.lock.yml) — a sibling tocli-for-beginners-syncandcopilot-workshops-sync.workflow_dispatch; permissionscontents: read,copilot-requests: write.github-samples/advanced-copilot-cliand opens incremental PRs to keep the mirror aligned.automated-update, learning-hub, advanced-copilot-cliand are for human review (never auto-merged).2. Course mirror
Deterministically mirrored from the upstream source (transformed for the site: frontmatter, GitHub admonitions preserved, site-absolute image paths, trailing-slash internal links):
learning-hub/advanced-copilot-cli/index.md(intro + module table)learning-hub/advanced-copilot-cli/00-prerequisites.md…08-wrap-up.md, living directly under the course folderwebsite/public/images/learning-hub/advanced-copilot-cli/3. Navigation wiring
website/astro.config.mjs: a single "Advanced Copilot CLI" sidebar group — an Overview link followed by the nine modules listed directly — placed after "Copilot Workshops".website/src/content/docs/learning-hub/index.md: a short course entry.Validation
gh aw compilesucceeds — lock file committed.npm run website:buildpasses; all pages render and every sidebar slug maps to a real file.